<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.函数声明
        function f1(){
            console.log("f1");
        }
        //2.函数表达式
        let f2=function(){
            console.log("f2");
        };
       /*  
        3.ES6中新增了第三种函数的定义方式
            箭头函数：使用关键字=>进行定义，本身是一个匿名函数
            箭头函数只能使用表达式的方式来进行定义 
        */
        //定义一个无参数的箭头函数
        let f3 = () => {
            console.log("我是函数f3");
        };
        f3();

        //定义一个有参数的箭头函数
        let f4 = (a) => {
            console.log(a);
        };
        f4(100);

        //如果函数定义时候，有且只有一个参数时，可以直接将箭头函数的形参括号省略
        let f5 = a => {
            console.log(a);
        };
        f5(1000);

        //如果函数在定义时候，有且仅有一行返回值代码，可以省略箭头函数体的{}和return
        function f6(){
            return "我是返回值";
        }

        let f7= () => "我就是返回值";
        console.log(f7());

        let f8 = () => {return "我是返回值呀"};
        console.log(f8());


        //如果函数有且仅有一行代码，但没有返回值，通过定义void关键字进行函数简化
        //void描述该函数没有返回值
        let fun=function(){
            console.log("嘿嘿，我是fun函数");
        };
        let fun2 = () => void console.log("嘿嘿，我是fun2函数");//标准语法
        fun2();

        let fun3 = () => console.log("嘿嘿，我是fun3函数");//非标准语法
        fun3();


        //函数定义时候，有且有一个形参和一行代码，可以省略()和{}
        let f9 = function(a){
            return a;
        };
        let f10 = a => a;
        console.log(f10(19));

        // 如果函数中有且仅有一行函数，且需要返回一个对象数据
        function f11(){
            return {name:"tom",age:20};
        }
        let f12 = () => ({name:"tom",age:20});//需要使用()进行括起来，表示{}为对象构建的关键字
        console.log(f12());
    </script>
</head>
<body>
    
</body>
</html>